package com.example.takeaway.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.takeaway.model.PageVO;
import com.example.takeaway.model.bo.Order;
import com.example.takeaway.model.dto.OrderSubmitDTO;
import com.example.takeaway.model.dto.ShopOrderPageQuery;
import com.example.takeaway.model.vo.OrderReviewVO;
import com.example.takeaway.model.vo.OrderListVO;
import com.example.takeaway.model.vo.OrderVO;
import com.example.takeaway.model.vo.ShopOrderListVO;

import java.util.List;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author 邢晨旭
 * @since 2023-10-12
 */
public interface OrderService extends IService<Order> {

    /**
     * 根据购物车数据生成订单预览页信息
     *
     * @param shopId 店铺id
     * @param userId 用户id
     * @return 订单预览页信息
     */
    OrderReviewVO review(Long shopId, Long userId);

    /**
     * 提交订单
     *
     * @param orderSubmit 订单信息
     * @return 订单id
     */
    Long submit(OrderSubmitDTO orderSubmit);

    /**
     * 用户订单列表
     * @param userId 用户id
     * @param status 订单状态
     * @return 订单列表 1 全部 /2 进行中/3 已完成(待评价) /4 已取消(退款)
     */
    List<OrderListVO> userOrderList(Long userId, Integer status);

    /**
     * 店铺订单列表
     * @param pageQuery 查询条件
     * @return 订单列表
     */
    PageVO<OrderVO> shopOrderList(ShopOrderPageQuery pageQuery);

    /**
     * 修改订单状态
     * @param orderId 订单id
     * @param code 订单状态(0:创建, 1:待接单, 2:备餐中, 3:配送中,4:已完成, 5:已取消)
     */
    void changeOrderStatus(Long orderId, Integer code);

    /**
     * 订单详情
     * @param orderId 订单id
     * @return  订单详情
     */
    OrderVO orderDetail(Long orderId);

    /**
     * 取消订单
     * @param orderId
     * @param reason
     */
    void cancelOrder(Long orderId, String reason);
}
